classDiagram
    class Product {
        <<abstract>>
        +partA: string
        +partB: string
        +getProduct(): string
    }
    class Builder {
        <<interface>>
        +buildPartA(string): void
        +buildPartB(string): void
        +getProduct(): Product
    }
    class ConcreteBuilder {
        -partA: string
        -partB: string
        +buildPartA(string): void
        +buildPartB(string): void
        +getProduct(): Product
    }
    class Director {
        +buildMinimalViableProduct(Builder): Product
    }
    class Client {
        +setBuilder(builder: Builder): void
        +getBuilder(): Builder
    }

    Product <|.. ConcreteBuilder
    Builder <|.. ConcreteBuilder
    Director --> Builder : Directs
    Client --> Builder : Uses
    Client --> Director : Uses
